package cn.iocoder.yudao.module.erp.service.departquantity;

import java.util.*;

import cn.iocoder.yudao.module.system.controller.admin.dept.vo.dept.DeptListReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
import jakarta.validation.*;
import cn.iocoder.yudao.module.erp.controller.admin.departquantity.vo.*;
import cn.iocoder.yudao.module.erp.dal.dataobject.departquantity.DepartQuantityDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

/**
 * 带量分配 Service 接口
 *
 * @author 芋道源码
 */
public interface DepartQuantityService {

    /**
     * 创建带量分配
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createDepartQuantity(@Valid DepartQuantitySaveReqVO createReqVO);

    /**
     * 更新带量分配
     *
     * @param updateReqVO 更新信息
     */
    void updateDepartQuantity(@Valid DepartQuantitySaveReqVO updateReqVO);

    /**
     * 删除带量分配
     *
     * @param id 编号
     */
    void deleteDepartQuantity(Long id);

    /**
     * 获得带量分配
     *
     * @param id 编号
     * @return 带量分配
     */
    DepartQuantityDO getDepartQuantity(Long id);

    /**
     * 获得带量分配分页
     *
     * @param pageReqVO 分页查询
     * @return 带量分配分页
     */
    PageResult<DepartQuantityDO> getDepartQuantityPage(DepartQuantityPageReqVO pageReqVO);

    // ==================== 子表（部门） ====================

    /**
     * 获得部门列表
     *
     * @param id 部门id
     * @return 部门列表
     */
    List<DeptDO> getDeptListById(Long id);

    List<DeptDO> getDeptPage(DeptListReqVO pageReqVO);

    List<DepartQuantityRespVO> getQuantity(Long id);

    List<String> selectForProduct(Long productId);

    void deleteForProduct(Long productId);
}